package cn.z2huo.knowledge.basic.internal.internal;

import lombok.Setter;

/**
 *
 */
class InternalClassDemo {

    @Setter
    private int param;

    @Setter
    private static int param2;

    class Contents {

        private final int i = 1;

        public int getI() {
            return i;
        }

        public int incr() {
            // 非静态内部类的示例方法可以引入外部类的静态和非静态属性
            return i + param + param2;
        }
        
        public static int decr() {
            // 非静态内部类可以引用外部类的静态属性，但是不能引入外部类的非静态属性
            // 同样，静态方法不能引入当前类内部的非静态属性
//            return i - param - param2;
            return -1;
        }
    }

    public static Contents getStaticContents() {
        // 静态方法不能引入外部类中的非静态类
//        return new Contents();
        return null;
    }

    public Contents getContents() {
        return new Contents();
    }

    public static void main(String[] args) {
        InternalClassDemo demo = new InternalClassDemo();
        Contents contents = demo.getContents();
        Contents contents2 = demo.new Contents();

        // 'cn.z2huo.knowledge.basic.internal.internal.InternalClassDemo.this' cannot be referenced from a static context
//        Contents contents1 = new Contents();
    }
}
